<?php  
class GoodsAttrModel extends Model{

	public $table="goods_attr";
	/**
	 * 构造函数
	 * @return [type] [description]
	 */
	public function __init(){}
	/**
	 * 获得商品属性
	 * @return [array] [商品属性包含显示方式]
	 */
	public function get(){
		//获得商品类型ID
		$cat_id=Q('cat_id',0,'intval');

		$gid=Q('goods_gid');
		//获得该类型所有属性（关联查询：关联商品属性表）
		if($gid){//编辑

			$sql="select *,a.attr_value default_value,a.attr_id attr_id from shop_attribute AS a LEFT JOIN (select * FROM shop_goods_attr AS ga where goods_gid=$gid) AS c ON a.attr_id=c.attr_id WHERE a.cat_id=$cat_id ORDER BY id";

			$attr=M()->query($sql);
					
		}else{//添加

			$attr=M('attribute')->field("*,attr_value default_value")->where("cat_id=$cat_id")->all();	
			
		}
		//显示方式（变量函数操作）
		$method=array(1=>'_text',2=>'_select',3=>'_textarea');

		//记录已经处理过的属性 用于js的 + —
		$recodeAttr=array();

		foreach ($attr as $id => $a) {

			//录入方式变成变量函数
			$type=$method[$a['attr_input_type']];
			//将显示方式压入
			$html=$this->$type($a);

			if ($a['attr_type']==1) {//规格属性
				//编辑时 读取附加价格
				$attr_price=isset($a['attr_price'])?$a['attr_price']:'';

				$html.="<input type='text' name='attr_price_list[]' value='$attr_price'/> 元 （属性加价）";

			}else{//普通属性 （附加价格为0）
				$html.="<input type='hidden' name='attr_price_list[]' value='0'/>";
			}

			//隐藏域主键
			$html.="<input type='hidden' name='attr_id_list[]' value='{$a['attr_id']}'/>";

			$attr[$id]['html']=$html;

			if ($a['attr_input_type']==2) {//录入方式为下拉框 
				if (in_array($a['attr_id'], $recodeAttr)) {//判断是否为已处理的

					//如果为已处理的  属性名前加一个[-] 删除按钮
					$attr[$id]['attr_name']="<a href='javascript:;' onclick='removeAttr(this);'>[一]</a>".$a['attr_name'];
				}else{

					//如果为未处理的  属性名前加一个[+] 删除按钮
					$attr[$id]['attr_name']="<a href='javascript:;' onclick='addAttr(this);'>[十]</a>".$a['attr_name'];
				}
			}
			//记录处理好的attr_id
			$recodeAttr[]=$a['attr_id'];
		}
		
		//返回处理后的数据
		return $attr;
	}
	/**
	 * 文本输入录入方式 (变量函数)
	 * @param  [array] $attr [商品属性]
	 * @return [string]       [显示方式]
	 */
	private function _text($attr){
		return "<input type='text' name='attr_value_list[]' value='{$attr['attr_value']}'/>";
	}
	/**
	 * 下拉列表框 (变量函数)
	 * @param  [array] $attr [商品属性]
	 * @return [string]        [显示方式]
	 */
	private function _select($attr){
		//属性值反序列化（数组）
		$data=unserialize($attr['default_value']);
		
		$html="<select name='attr_value_list[]'>";
		foreach ($data as $d) {

			$selected=trim($attr['attr_value'])==trim($d)?" selected='' ":'';
			$html.="<option $selected>{$d}</option>";
		}
		$html.="</select>";
		return $html;
	}
	/**
	 * 文本域
	 * @param  [array] $attr  [商品属性]
	 * @return string        [显示方式]
	 */
	private function _textarea($attr){//变量函数
		return "<textarea name='attr_value_list[]'>{$attr['attr_value']}</textarea>";
	}
	/**
	 * 添加属性
	 * @param [int] $goods_gid [商品id]
	 */
	public function addAttr($goods_gid){
      	//属性不存在时不进行处理
        if (isset($_POST['attr_id_list'])) {
        	
        	// 定义空数组以储存最终插入到表中的数据
        	$data=array();
         
         	//循环添加属性
            foreach ($_POST['attr_id_list'] as $n => $attr_id) {
                
                $attr_value = $_POST['attr_value_list'][$n];//属性值
                $attr_price = $_POST['attr_price_list'][$n];//附加价格

                //组合一条属性数据
                $tmp = array(
                    'attr_value' => $attr_value,//属性值
                    'attr_price' => $attr_price,//属性价格
                    'goods_gid' => $goods_gid,//商品ID
                    'attr_id' => $attr_id//属性ID
                );
                //属性值不存在时不进行处理
                if(empty($attr_value)){
                    continue;
                }
                //获得类型属性 0 普通属性 1 规格属性
                $attr_type=M('attribute')->where("attr_id=$attr_id")->getField('attr_type');

                $map['goods_gid']=$goods_gid;

                $map['attr_id']=$attr_id;

                if ($attr_type==1) {//规格属性时
                	$map['attr_value']=$attr_value;
                }

                $id=$this->where($map)->getField('id');
                //如果有id值 则更新 否则添加
                if ($id) {
                	$tmp['id']=$id;
                }
                $data[]=$tmp;
                //删除旧属性
            	$this->where("goods_gid=$goods_gid")->del();
            	foreach ($data as $d) {
            		//添加
               		$this->add($d);
            	}
            }
        }else{
            return false;
        }
    }
}
?>